﻿/// <summary>
/// Copyright(c) 2008-2009北京玖富时代投资顾问有限公司, All Rights Reserved.
/// 
/// 现在代码里面有不少的字符串“+”操作，这样做的性能是很低下，而改为StringBuilder，工作量又相当大。
/// 这个类是将string重新构造了一下，隐式转换为StringBuilder，性能上会有较大提升，基本与StringBuilder持平，
/// 感兴趣的同事可以继续更新改造：），技术来源：cnblog
/// 版本：Ver 1.0
/// 作者：【周燕龙】
/// 时间：2009-10-27
/// </summary>


using System;
using System.Collections.Generic;
using System.Text;

namespace Hisuntech.SystemFramework.Common
{
    public class FtStringJoiner
    {

        protected StringBuilder strBuilder;

        /// <summary>
        /// 获取此实例中的字符数
        /// </summary>
        public int Length
        {
            get { return this.ToString().Length; }
        }

        public FtStringJoiner()
        {
            strBuilder = new StringBuilder(255);
        }

        /// <summary>
        /// 把string转换为FtStringJoiner
        /// </summary>
        /// <param name="p_str"></param>
        /// <returns></returns>
        public static implicit operator FtStringJoiner(string p_str)
        {
            FtStringJoiner fst = new FtStringJoiner();
            fst.strBuilder.Append(p_str);
            return fst;
        }

        /// <summary>
        /// 重载+运算
        /// </summary>
        /// <param name="p_ftsb"></param>
        /// <param name="p_str"></param>
        /// <returns></returns>
        public static FtStringJoiner operator +(FtStringJoiner p_ftsb, string p_str)
        {
            p_ftsb.strBuilder.Append(p_str);
            return p_ftsb;
        }

        /// <summary>
        /// 把FtStringJoiner转换为string,需要重载ToString()方法
        /// </summary>
        /// <param name="p_ftsb"></param>
        /// <returns></returns>
        public static implicit operator string(FtStringJoiner p_ftsb)
        {
            return p_ftsb.ToString();
        }

        /// <summary>
        /// 重载ToString()方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return strBuilder.ToString();
        }

        public string SubString(int p_start, int p_count)
        {
            string s = this.ToString();
            return s.Substring(p_start, p_count);
        }


        public string SubString(int p_start)
        {
            string s = this.ToString();
            return s.Substring(p_start);
        }
        
    }
}
